{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import os,random,shutil\n",
    "np.random.seed(7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 为Keras模型准备数据集\n",
    "#1，指定一些超参数：\n",
    "FOLDER='E:\\PyProjects\\DataSet\\Small_set_5_Class'\n",
    "train_data_dir=os.path.join(FOLDER,'train')\n",
    "val_data_dir=os.path.join(FOLDER,'test')\n",
    "train_samples_num=400 # train set中全部照片数\n",
    "val_samples_num=100\n",
    "IMG_W,IMG_H,IMG_CH=150,150,3 # 单张图片的大小\n",
    "batch_size=32\n",
    "epochs=50  # 用比较少的epochs数目做演示，节约训练时间\n",
    "class_num=5 # 此处有5个类别"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 400 images belonging to 5 classes.\n"
     ]
    }
   ],
   "source": [
    "# 2，准备训练集，keras有很多Generator可以直接处理图片的加载，增强等操作，封装的非常好\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "train_datagen = ImageDataGenerator( # 单张图片的处理方式，train时一般都会进行图片增强\n",
    "        rescale=1. / 255, # 图片像素值为0-255，此处都乘以1/255，调整到0-1之间\n",
    "        shear_range=0.2, # 斜切\n",
    "        zoom_range=0.2, # 放大缩小范围\n",
    "        horizontal_flip=True) # 水平翻转\n",
    "\n",
    "train_generator = train_datagen.flow_from_directory(# 从文件夹中产生数据流\n",
    "    train_data_dir, # 训练集图片的文件夹\n",
    "    target_size=(IMG_W, IMG_H), # 调整后每张图片的大小\n",
    "    batch_size=batch_size,\n",
    "    class_mode='categorical') # 此处是多分类问题，故而mode是categorical"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 100 images belonging to 5 classes.\n"
     ]
    }
   ],
   "source": [
    "# 3，同样的方式准备测试集\n",
    "val_datagen = ImageDataGenerator(rescale=1. / 255) # 只需要和trainset同样的scale即可，不需增强\n",
    "val_generator = val_datagen.flow_from_directory(\n",
    "        val_data_dir,\n",
    "        target_size=(IMG_W, IMG_H),\n",
    "        batch_size=batch_size,\n",
    "        class_mode='categorical')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 4，建立Keras模型：模型的建立主要包括模型的搭建，模型的配置\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Conv2D, MaxPooling2D\n",
    "from keras.layers import Activation, Dropout, Flatten, Dense\n",
    "from keras import optimizers\n",
    "def build_model(input_shape):\n",
    "    # 模型的搭建：此处构建三个CNN层+2个全连接层的结构\n",
    "    model = Sequential()\n",
    "    model.add(Conv2D(32, (3, 3), input_shape=input_shape))\n",
    "    model.add(Activation('relu'))\n",
    "    model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "    model.add(Conv2D(32, (3, 3)))\n",
    "    model.add(Activation('relu'))\n",
    "    model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "    model.add(Conv2D(64, (3, 3)))\n",
    "    model.add(Activation('relu'))\n",
    "    model.add(MaxPooling2D(pool_size=(2, 2)))\n",
    "\n",
    "    model.add(Flatten())\n",
    "    model.add(Dense(64))\n",
    "    model.add(Activation('relu'))\n",
    "    model.add(Dropout(0.5)) # Dropout防止过拟合\n",
    "    model.add(Dense(class_num)) # 此处多分类问题，用Dense(class_num)\n",
    "    model.add(Activation('softmax')) #多分类问题用softmax作为activation function\n",
    "    \n",
    "    # 模型的配置\n",
    "    model.compile(loss='categorical_crossentropy', # 定义模型的loss func，optimizer，\n",
    "                  optimizer=optimizers.RMSprop(), # 使用默认的lr=0.001\n",
    "                  metrics=['accuracy'])# 主要优化accuracy\n",
    "\n",
    "    return model # 返回构建好的模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/50\n",
      "12/12 [==============================] - 24s 2s/step - loss: 2.6734 - acc: 0.2376 - val_loss: 1.4268 - val_acc: 0.4583\n",
      "Epoch 2/50\n",
      "12/12 [==============================] - 24s 2s/step - loss: 1.4014 - acc: 0.4170 - val_loss: 0.9835 - val_acc: 0.8229\n",
      "Epoch 3/50\n",
      "12/12 [==============================] - 24s 2s/step - loss: 1.2627 - acc: 0.4865 - val_loss: 1.3209 - val_acc: 0.3958\n",
      "Epoch 4/50\n",
      "12/12 [==============================] - 24s 2s/step - loss: 1.1877 - acc: 0.5496 - val_loss: 0.6752 - val_acc: 0.7708\n",
      "Epoch 5/50\n",
      "12/12 [==============================] - 23s 2s/step - loss: 0.9243 - acc: 0.6801 - val_loss: 1.0047 - val_acc: 0.5833\n",
      "Epoch 6/50\n",
      "12/12 [==============================] - 26s 2s/step - loss: 0.9172 - acc: 0.6693 - val_loss: 0.7542 - val_acc: 0.7500\n",
      "Epoch 7/50\n",
      "12/12 [==============================] - 24s 2s/step - loss: 0.5917 - acc: 0.8073 - val_loss: 1.1518 - val_acc: 0.6979\n",
      "Epoch 8/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.8342 - acc: 0.7135 - val_loss: 0.9778 - val_acc: 0.6354\n",
      "Epoch 9/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.6113 - acc: 0.7765 - val_loss: 0.3856 - val_acc: 0.8333\n",
      "Epoch 10/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 1.0554 - acc: 0.7239 - val_loss: 0.5599 - val_acc: 0.7812\n",
      "Epoch 11/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.4801 - acc: 0.8262 - val_loss: 0.4683 - val_acc: 0.8333\n",
      "Epoch 12/50\n",
      "12/12 [==============================] - 24s 2s/step - loss: 1.2470 - acc: 0.6821 - val_loss: 0.4899 - val_acc: 0.8438\n",
      "Epoch 13/50\n",
      "12/12 [==============================] - 24s 2s/step - loss: 0.6440 - acc: 0.7914 - val_loss: 0.4405 - val_acc: 0.8542\n",
      "Epoch 14/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.4429 - acc: 0.8436 - val_loss: 0.6955 - val_acc: 0.8646\n",
      "Epoch 15/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.8651 - acc: 0.7896 - val_loss: 0.7130 - val_acc: 0.8438\n",
      "Epoch 16/50\n",
      "12/12 [==============================] - 26s 2s/step - loss: 0.4667 - acc: 0.8490 - val_loss: 0.4297 - val_acc: 0.8646\n",
      "Epoch 17/50\n",
      "12/12 [==============================] - 26s 2s/step - loss: 0.6176 - acc: 0.7864 - val_loss: 0.6573 - val_acc: 0.8646\n",
      "Epoch 18/50\n",
      "12/12 [==============================] - 26s 2s/step - loss: 0.5602 - acc: 0.8511 - val_loss: 0.4648 - val_acc: 0.8333\n",
      "Epoch 19/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.4857 - acc: 0.8264 - val_loss: 0.5228 - val_acc: 0.8646\n",
      "Epoch 20/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.6664 - acc: 0.8485 - val_loss: 0.6075 - val_acc: 0.8125\n",
      "Epoch 21/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 1.0877 - acc: 0.8177 - val_loss: 1.1501 - val_acc: 0.7396\n",
      "Epoch 22/50\n",
      "12/12 [==============================] - 27s 2s/step - loss: 0.3673 - acc: 0.8883 - val_loss: 0.6338 - val_acc: 0.8542\n",
      "Epoch 23/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.9304 - acc: 0.7857 - val_loss: 1.0072 - val_acc: 0.8021\n",
      "Epoch 24/50\n",
      "12/12 [==============================] - 23s 2s/step - loss: 0.7946 - acc: 0.8177 - val_loss: 0.5868 - val_acc: 0.8438\n",
      "Epoch 25/50\n",
      "12/12 [==============================] - 27s 2s/step - loss: 0.3936 - acc: 0.8571 - val_loss: 0.5408 - val_acc: 0.8542\n",
      "Epoch 26/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.4076 - acc: 0.8511 - val_loss: 0.6458 - val_acc: 0.8438\n",
      "Epoch 27/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 1.1334 - acc: 0.8197 - val_loss: 1.5270 - val_acc: 0.7708\n",
      "Epoch 28/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 1.4406 - acc: 0.8047 - val_loss: 1.1187 - val_acc: 0.8229\n",
      "Epoch 29/50\n",
      "12/12 [==============================] - 24s 2s/step - loss: 1.3085 - acc: 0.7939 - val_loss: 0.6696 - val_acc: 0.8646\n",
      "Epoch 30/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.4625 - acc: 0.8519 - val_loss: 1.4409 - val_acc: 0.8021\n",
      "Epoch 31/50\n",
      "12/12 [==============================] - 27s 2s/step - loss: 0.5629 - acc: 0.8568 - val_loss: 0.7870 - val_acc: 0.8646\n",
      "Epoch 32/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.4114 - acc: 0.8719 - val_loss: 0.9723 - val_acc: 0.7812\n",
      "Epoch 33/50\n",
      "12/12 [==============================] - 28s 2s/step - loss: 0.4317 - acc: 0.8411 - val_loss: 0.4189 - val_acc: 0.9375\n",
      "Epoch 34/50\n",
      "12/12 [==============================] - 28s 2s/step - loss: 1.1945 - acc: 0.8434 - val_loss: 0.9554 - val_acc: 0.8646\n",
      "Epoch 35/50\n",
      "12/12 [==============================] - 26s 2s/step - loss: 0.4511 - acc: 0.8774 - val_loss: 0.6401 - val_acc: 0.8750\n",
      "Epoch 36/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.5176 - acc: 0.8388 - val_loss: 8.9278 - val_acc: 0.4271\n",
      "Epoch 37/50\n",
      "12/12 [==============================] - 24s 2s/step - loss: 2.5228 - acc: 0.7526 - val_loss: 1.2456 - val_acc: 0.8646\n",
      "Epoch 38/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.3026 - acc: 0.9299 - val_loss: 0.8202 - val_acc: 0.8958\n",
      "Epoch 39/50\n",
      "12/12 [==============================] - 26s 2s/step - loss: 0.3605 - acc: 0.9061 - val_loss: 1.6295 - val_acc: 0.8333\n",
      "Epoch 40/50\n",
      "12/12 [==============================] - 27s 2s/step - loss: 1.3839 - acc: 0.8251 - val_loss: 1.0789 - val_acc: 0.8854\n",
      "Epoch 41/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.7514 - acc: 0.8487 - val_loss: 0.9405 - val_acc: 0.8750\n",
      "Epoch 42/50\n",
      "12/12 [==============================] - 26s 2s/step - loss: 0.4718 - acc: 0.8854 - val_loss: 0.7696 - val_acc: 0.8750\n",
      "Epoch 43/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.9779 - acc: 0.8715 - val_loss: 8.2611 - val_acc: 0.4688\n",
      "Epoch 44/50\n",
      "12/12 [==============================] - 27s 2s/step - loss: 1.2187 - acc: 0.8408 - val_loss: 1.1740 - val_acc: 0.8438\n",
      "Epoch 45/50\n",
      "12/12 [==============================] - 26s 2s/step - loss: 0.8515 - acc: 0.8828 - val_loss: 2.7831 - val_acc: 0.7500\n",
      "Epoch 46/50\n",
      "12/12 [==============================] - 24s 2s/step - loss: 1.5792 - acc: 0.8121 - val_loss: 1.0229 - val_acc: 0.8854\n",
      "Epoch 47/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.4105 - acc: 0.9164 - val_loss: 1.6948 - val_acc: 0.8542\n",
      "Epoch 48/50\n",
      "12/12 [==============================] - 25s 2s/step - loss: 0.7552 - acc: 0.8621 - val_loss: 1.3396 - val_acc: 0.8333\n",
      "Epoch 49/50\n",
      "12/12 [==============================] - 29s 2s/step - loss: 1.7067 - acc: 0.8073 - val_loss: 1.7971 - val_acc: 0.8333\n",
      "Epoch 50/50\n",
      "12/12 [==============================] - 27s 2s/step - loss: 1.0322 - acc: 0.8439 - val_loss: 1.0827 - val_acc: 0.8750\n"
     ]
    }
   ],
   "source": [
    "model=build_model(input_shape=(IMG_W,IMG_H,IMG_CH)) # 输入的图片维度\n",
    "# 模型的训练\n",
    "history_ft = model.fit_generator(train_generator, # 数据流\n",
    "                        steps_per_epoch=train_samples_num // batch_size, \n",
    "                        epochs=epochs,\n",
    "                        validation_data=val_generator,\n",
    "                        validation_steps=val_samples_num // batch_size)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 画图，将训练时的acc和loss都绘制到图上\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "def plot_training(history):\n",
    "    plt.figure(12)\n",
    "    \n",
    "    plt.subplot(121)\n",
    "    train_acc = history.history['acc']\n",
    "    val_acc = history.history['val_acc']\n",
    "    epochs = range(len(train_acc))\n",
    "    plt.plot(epochs, train_acc, 'b',label='train_acc')\n",
    "    plt.plot(epochs, val_acc, 'r',label='test_acc')\n",
    "    plt.title('Train and Test accuracy')\n",
    "    plt.legend()\n",
    "    \n",
    "    plt.subplot(122)\n",
    "    train_loss = history.history['loss']\n",
    "    val_loss = history.history['val_loss']\n",
    "    epochs = range(len(train_loss))\n",
    "    plt.plot(epochs, train_loss, 'b',label='train_loss')\n",
    "    plt.plot(epochs, val_loss, 'r',label='test_loss')\n",
    "    plt.title('Train and Test loss')\n",
    "    plt.legend()\n",
    " \n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_training(history_ft)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
